package message.utils;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * cookie处理工具类
 * 
 * @author sunhao(sunhao.java@gmail.com)
 * @version V1.0
 * @createTime 2012-7-10 下午02:41:14
 */
public class CookieUtils {

    /**
     * 私有化构造器
     */
    private CookieUtils(){}
	
	/**
	 * 设置cookie
	 * 
	 * @param response
	 * @param name			cookie的名称
	 * @param value			cookie的值
	 * @throws Exception 
	 */
	public static void setCookie(final HttpServletResponse response, final String name, final String value) throws Exception {
        setCookie(response, name, value, "/", "", "", -1);
    }
	
	/**
	 * 移除cookie
	 * 
	 * @param response
	 * @param name			cookie的名称
	 * @throws Exception 
	 */
	public static void removeCookie(final HttpServletResponse response, final String name) throws Exception {
        setCookie(response, name, "", "/", "", "", 0);
    }
	
	/**
	 * 设置cookie
	 * 
	 * @param response		
	 * @param name			cookie的名称
	 * @param value			cookie的值
	 * @param path			cookie的路径,不设置的话为当前路径
	 * @param comment		cookie的备注
	 * @param domain		cookie的共享域名,参考http://www.iteye.com/topic/34400
	 * @param expired		cookie的生存周期时间,生存周期默认时间为秒，
	 * 							如果设置为负值的话，则为浏览器进程Cookie(内存中保存)，关闭浏览器就失效。
	 */
	public static void setCookie(final HttpServletResponse response, final String name, final String value,
            String path, String comment, String domain, final int expired) throws Exception {
		Cookie cookie = new Cookie(name, value);
		cookie.setPath(path);
		cookie.setComment(comment);
		if(StringUtils.isNotEmpty(domain)){
			cookie.setDomain(domain);
		}
		cookie.setMaxAge(expired);
		response.addCookie(cookie);
	}
	
	/**
	 * 获取cookie的值
	 * 
	 * @param request
	 * @param name			cookie的名称
	 * @return
	 * @throws Exception 
	 */
	public static String getCookieValue(final HttpServletRequest request, final String name) throws Exception {
		if(ObjectUtils.isEmpty(request)){
			return StringUtils.EMPTY;
		}
		String cValue = null;
		Cookie[] cookies = request.getCookies();
		if(cookies != null && cookies.length > 0){
			for(Cookie cookie : cookies){
				if(StringUtils.equals(name, cookie.getName())){
					cValue = cookie.getValue();
					break;
				}
			}
		}
		
		return cValue;
	}

}
